package com.ssy.lingxi.member.merchant.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.entity.MemberDO;
import com.ssy.lingxi.member.merchant.entity.MemberStoreDO;
import com.ssy.lingxi.member.merchant.entity.MemberUserDO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.MemberOrganizationAddVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.MemberOrganizationDeleteVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.MemberOrganizationGetVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.MemberOrganizationUpdateVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.MemberOrgTreeVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.MemberOrganizationQueryVO;

import java.util.List;

/**
 * 会员组织机构服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-06-28
 */
public interface IBaseMemberOrganizationService {

    /**
     * 新增会员组织架构菜单
     * @param memberId 会员Id
     * @param addVO    接口参数
     * @return 操作结果
     */
    Wrapper<Void> addMemberOrg(Long memberId, MemberOrganizationAddVO addVO);

    /**
     * 新增会员门店组织架构菜单
     * @param memberStoreDO 会员门店信息
     * @param memberDO      会员信息
     * @param parentId      父节点id
     * @param orgName       组织机构名称
     * @param orgCode       机构代码
     * @return 操作结果
     */
    Wrapper<Void> addMemberStoreOrg(MemberStoreDO memberStoreDO, MemberDO memberDO, Long parentId, String orgName, String orgCode);

    /**
     * 根据菜单Id，更新组织机构信息
     * @param memberId 会员Id
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateMemberOrg(Long memberId, MemberOrganizationUpdateVO updateVO);

    /**
     * 删除一个会员组织架构
     * @param memberId 会员Id
     * @param deleteVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> deleteMemberOrg(Long memberId, MemberOrganizationDeleteVO deleteVO);

    /**
     * 查询一个会员组织架构
     * @param memberId 会员Id
     * @param getVO    接口参数
     * @return 操作结果
     */
    Wrapper<MemberOrganizationQueryVO> getMemberOrg(Long memberId, MemberOrganizationGetVO getVO);

    /**
     * 查询会员的所有组织架构，以树形菜单的形式返回
     * @param memberId 会员Id
     * @return 操作结果
     */
    Wrapper<List<MemberOrgTreeVO>> treeMemberOrg(Long memberId);

    /**
     * 查询会员的（非门店）所有组织架构，以树形菜单的形式返回
     * @param memberId 会员Id
     * @return 查询结果
     */
    Wrapper<List<MemberOrgTreeVO>> nonStoreTreeMemberOrg(Long memberId);

    /**
     * 查询会员的当前组织架构下单所有门店，用于订单数据权限
     * @param memberUserDO 会员用户信息
     * @return 门店ids
     */
    List<Long> getMemberOrgStoreIds(MemberUserDO memberUserDO, Long memberId);
}
